package cn.cangfei.massage.service;

import cn.cangfei.massage.dto.MassageDoctorDTO;
import cn.cangfei.massage.dto.custom.MassageDoctorDTOFinal;
import cn.cangfei.massage.dto.param.MassageDoctorParam;
import cn.cangfei.massage.entity.MassageDoctor;

import java.util.List;
import java.util.Optional;

/**
 * @author Lemon  2313812755@qq.com
 * @date 2023/2/4
 */

public interface IMassageDoctorService {

    /**
     * 添加师傅信息
     *
     * @param param 师傅信息参数
     * @return 是否成功
     */
    boolean insert(MassageDoctorParam param);

    /**
     * 更新师傅信息
     *
     * @param id    师傅编号
     * @param param 师傅信息参数
     * @return 是否成功
     */
    boolean update(Long id, MassageDoctorParam param);

    /**
     * 是否存在师傅信息
     *
     * @param id 师傅编号
     * @return 是否存在
     */
    boolean count(Long id);

    /**
     * 获取师傅信息
     *
     * @param id 师傅编号
     * @return 师傅编号
     */
    Optional<MassageDoctor> getOptional(Long id);

    /**
     * 获取师傅名称
     *
     * @param id 师傅编号
     * @return 师傅名称，空则，返回未知
     */
    String getName(Long id);

    /**
     * 获取转换后的对象信息
     *
     * @param id 师傅编号
     * @return 转换后的对象
     */
    Optional<MassageDoctorDTO> getConvert(Long id);

    /**
     * 删除师傅信息
     *
     * @param id 师傅编号
     * @return 是否成功
     */
    boolean delete(Long id);

    /**
     * 查找师傅信息
     *
     * @param name       师傅名称
     * @param pageNum    第几页
     * @param pageSize   页大小
     * @param massageId 推拿馆id
     * @return 师傅信息列表
     */
    List<MassageDoctorDTO> list(String name, Integer pageNum, Integer pageSize, Long massageId);

    /**
     * 查找师傅信息列表
     *
     * @param name         师傅名称
     * @param specialId    专科编号
     * @param outpatientId 门诊编号
     * @param pageNum      第几页
     * @param pageSize     页大小
     * @return 师傅信息列表
     */
    List<MassageDoctorDTO> list(String name, Long specialId, Long outpatientId, Integer pageNum, Integer pageSize);


    // 根据massageId查询这个推拿馆的师傅
    List<MassageDoctorDTOFinal> getDoctorByMassageId(Long massageId, String week, String day);

    List<MassageDoctorDTO> getDoctorByMassageId1(Long massageId, String week, String day);

    Integer getDoctorByMassageId(Long massageId);

    // 根据massageId查询这个推拿馆的师傅
    List<MassageDoctorDTO> getDoctorByMassageId(Long massageId, String name, Integer pageNum, Integer pageSize);

    /**
     * 查询全部师傅信息
     *
     * @return
     */
    List<MassageDoctor> getAllDoctor();

    boolean countMassageId(Long massageId);


    List<MassageDoctorDTO> getDoctorByMassageIdForAdmin(Long massageId, String week, String day);
}
